﻿#region << 版 本 注 释 >>
/*----------------------------------------------------------------
// Copyright (C) 2021 kingerrobot
// 版权所有。 
//
// 文件名：LoggingAttribute
// 文件功能描述：
//
// 创建者：名字 (zzl)
// 时间：2021/12/22 9:06:33
//
// 修改人：
// 时间：
// 修改说明：
// 版本：V1.0.0
//----------------------------------------------------------------*/
#endregion
namespace KingerRobot.MexicoSailunMDC.SpiService.Helpers.MethodLogFody;

internal class LoggingAttribute : MoAttribute
{
    /// <summary>
    /// 进入方法
    /// </summary>
    /// <param name="context"></param>
    public override void OnEntry(MethodContext context)
    {
        // 从context对象中能取到包括入参、类实例、方法描述等信息
        // Log.Info("方法执行前");
        var className = context?.Method?.DeclaringType?.Name;
        var methodName = context?.Method?.Name;
        //var param = context?.Arguments?.ToJson();
        K8.LSF.Client.Log(new K8.LSF.Log() { Data = $"{className}-方法:{methodName} 开始执行-参数: " });
    }

    /// <summary>
    /// 异常
    /// </summary>
    /// <param name="context"></param>
    public override void OnException(MethodContext context)
    {
        // Log.Error("方法执行异常", context.Exception);

        var className = context?.Method?.DeclaringType?.Name;
        var methodName = context?.Method?.Name;
        var message = context?.Exception?.Message;
        //var exception = context?.Exception?.ToJson();
        K8.LSF.Client.Log(new K8.LSF.Log() { Data = $"{className}-方法:{methodName}异常-异常信息:--{message} " });
    }

    /// <summary>
    /// 方法结束
    /// </summary>
    /// <param name="context"></param>
    public override void OnExit(MethodContext context)
    {
        //// Log.Info("方法退出时，不论方法执行成功还是异常，都会执行");
        //var className = context.Method.DeclaringType.Name;
        //var methodName = context.Method.Name;
        //var result = context.ReturnValue.ToJson();
        //K8.LSF.Client.Log(new K8.LSF.Log() { Data = $"{className}-方法:{methodName}结束-返回值:{result} " });
    }
    /// <summary>
    /// 正常结束
    /// </summary>
    /// <param name="context"></param>
    public override void OnSuccess(MethodContext context)
    {
        // Log.Info("方法执行成功后");
        var className = context?.Method?.DeclaringType?.Name;
        var methodName = context?.Method?.Name;
        //var result = context?.ReturnValue?.ToJson();
        K8.LSF.Client.Log(new K8.LSF.Log() { Data = $"{className}-方法:{methodName} 执行成功-返回值: " });
    }
}